"""
简单继承  AutoService 实现多个账户批量登录

主要关键是autoService里面的multiRunner方法
第一个参数必然是类，第二个参数是完整的流程名，注意传入的是字符串

multiRunner会自动实例化类，然后调用init方法，把json里面的数据传入进去，phoneNum字段必填的，比如json文件内容如下：
[{"phoneNum":"123456","passwd":"123456"},{"phoneNum":"1234567","passwd":"1234567"},{{"phoneNum":"12345689","passwd":"1234568"}}]

就会调用 对应类生成对象的init方法，传入类似于 obj.init(phoneNum="123456",passwd="123456"),obj.init(phoneNum="1234567",passwd="1234567") ....

再比如内容长这样的：
[{"phoneNum":"123456"},{"phoneNum":"1234567"},{{"phoneNum":"12345689"}}]

就会调用 对应类生成对象的init方法，传入类似于 obj.init(phoneNum="123456"),obj.init(phoneNum="1234567") ....

init方法调用完后,就会自动调用一个完整的flow，
比如我们本文件中的flow_getUserInfo.


运行过程如下，注意实例化类为对象  不是并行的，是顺序执行的！如果是想要让同一个对象重复使用，则需要自定义destory()方法，并加上装饰器dataUnTracker

multiRunner -> 读取配置文件(conf/[类名].json)   ->实例化类为对象    -> init(PhoneNum=.....)   -> flow_getUserInfo()
                                             ->实例化类为对象    -> init(PhoneNum=.....)   -> flow_getUserInfo()
                                             ->实例化类为对象    -> init(PhoneNum=.....)   -> flow_getUserInfo()
                                             ->实例化类为对象    -> init(PhoneNum=.....)   -> flow_getUserInfo()

"""

import os
import sys

# 切换目录到上级目录，引入AutoService【正式情况下请把脚本放在上级目录，就可以不用这两句啦】
if not os.path.exists("core/autoService.py"):
    sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

from core.autoService import AutoService,multiRunner


class FirstAutoService(AutoService):
    # 取消自动读取保存变量
    __autoLoadEnv__ = False

    # 如果不取消，将会把以storage_开头的变量保存到data下。
    def init(self, **kwargs):
        # 这里return 父类的init方法返回值，可以实现链调用。
        return super(FirstAutoService, self).init(**kwargs)

    def sendSms(self):
        super(FirstAutoService, self).sendSms()
        """
            调用API发送 验证码流程，这里省略
        """
        self.log("已经发送了验证码")

    def login(self):
        code = FirstAutoService.getVerCode()
        """
            请用电脑QQ模拟一条验证码发送给手机QQ，让手机有个弹窗消息，否则将会一直卡在上一步，直至60s的超时
        """
        self.log(f"手机号为:{self.getNum()}验证码:{code}")
        """
            这里就继续写登录流程啦
        """
        self.log("登录成功")

    # 定义一个完整的登录流程，一定要有这个习惯。
    def flow_login(self):
        self.sendSms()
        self.login()

    def getUserInfo(self):
        self.log(f"这里是登录成功后，用户登录的信息啦,用户的sessionID{self.storage_session}")

    def flow_getUserInfo(self):
        self.flow_login()
        self.getUserInfo()

if __name__ == '__main__':
    # 调用init方法，传入必须要的phoneNum，然后就调用登录流程啦
    multiRunner(FirstAutoService,"flow_getUserInfo")
